import java.util.Scanner;

/**
 * Description:
 * Date: 2025-09-25
 * Time: 21:27
 */
public class Test {

    //数字9 出现的次数
    public static void main1(String[] args) {
        int i = 1;
        int count = 0;
        for (i = 1; i <= 100; i++) {
            //计算个位数上的数字9: 对一个整数整除10得个位数
            if (i % 10 == 9) {
                count++;
            }
            //计算十位数 上的9: 对一个整数出10得十位数
            if (i / 10 == 9) {
                count++;
            }
        }
        System.out.println(count);
    }

    //判断一个数是否是素数
    public static void main2(String[] args) {
        //第一种方法:只能被1或自己整除的数是素数
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //boolean flg = true;
        int i = 2;
        for (i = 2; i < n; i++) {
            if (n % i == 0) {
                //flg =false;
                System.out.println(n + "不是素数");
                break;
            }
        }
        if(i >= n){
            System.out.println(n + "是素数");
        }
//        if(flg == true){
//            System.out.println(n + "是素数");
//        }
    }

    public static void main3(String[] args) {
        //第二种方法:任何一个数字n，都可以写成n = a*b 的形式，都拥有配对的因子，只需检查一边因子即可，
        // 而因子的大小 a<=b，当为根号a = 根号b时，可检查完所有配套的因子
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for(i = 2; i <= Math.sqrt(n); i++){
            if(n % i == 0){
                System.out.println(n+"不是素数");
                break;//一定要加break，才配对下面i > Math.sqrt(n)的判定条件，不加的话i始终会大于i > Math.sqrt(n)的
                      //或者换一个判定方式
            }
        }

        if(i > Math.sqrt(n)){
            System.out.println(n+"是素数");
        }
    }

    //打印 X 图形
    public static void main4(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//表示行数，也表示宽度
        for(int j = 1; j <= n; j++){
            for (int i = 1; i <= n; i++) {
                if(i == j || i == n - j + 1){
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }

            }
            System.out.println();
        }
    }

    //求 0 - n之间的水仙花数
    //水仙花数:一个n位数，它的每一位上的数字的n次幂之和等于它本身
    public static void main5(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //1.先求这个数是几位数

        for (int i = 0; i <= n; i++) {
            int count = 0;
            int m = i;
            //直接用数字本身来判定，不需要额外count++
            while (m != 0){//不能计算一位  （优化点：数字最低都是一位，而一位进步了while循环，可以初始化count为1
                m = m / 10;
                count++;
            }

            int sum = 0;
            int a = i;
            while (a  != 0){//能计算一位
                sum += Math.pow(a % 10, count);
                a = a / 10;
            }

            if(sum == i){
                System.out.println(i);
            }

        }

    }

    //计算计算1/1-1/2+1/3-1/4+1/5.... + 1/99 - 1/100 的值
    public static void main6(String[] args) {
        // 整数不能参与分数的计算
        double i = 2;
        double sum = 1.0;
        for(i = 2; i <= 100; i++){
            if(i % 2 == 0){
                sum -= 1.0/i;
            }else {
                sum += 1.0/i;
            }
        }
        System.out.println(sum);
    }

    //求两个整数的最大公约数
    public static void main7(String[] args) {
        //暴力穷举
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int min = m < n? m: n;
        int tag = 0;
        for (int i = 1; i <= min; i++) {
            if(m % i == 0 && n % i == 0){
                tag = i;
            }
        }
        System.out.println(tag);
    }

    public static void main9(String[] args) {
        //辗转相除法:两数取余，除数和余数 做新的 被除数和除数。循环直至取余为0，此时除数为最大公约数
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = a % b;
        while (c != 0){
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println(b);
    }

    //求一个整数，在内存当中存储时，二进制1的个数。
    public static void main10(String[] args) {
        //无符号右移一位后与1单独进行按位与判断是否该位二进制是否为1
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if(((n >>> i) & 1) == 1 ){
                count++;
            }
        }
        System.out.println(count);
    }

    public static void main11(String[] args) {
        //对某个进程进行全遍历的时候，可以考虑优化点：是否能在某个节点直接判断出结果从而减少遍历次数
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;

        while (n != 0){
           if((n & 1) != 0){//不等于0有1 (判断了一位二进制上的数是否是1还是0)
               count++;
           }
           n >>>= 1;//不看n值的变化，只需看二进制位上的变化
        }
        System.out.println(count);
    }

    public static void main(String[] args) {
        //采取相临的两个数据进行按位与运算，因为相临的两个数据总能消除一个二进制上的1
        //有几个1就循环几次
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;
        while (n != 0){
            n = n & (n-1);
            count++;
        }
        System.out.println(count);
    }
}
